#pragma once 
#include"Mutex.hpp"
#include"InetAddr.hpp"
#include<vector>

namespace kzz
{
    //这个类是为了给所有客户端发消息，加锁是为了维护当前用户

    class Route
    {
        public:
        Route()
        {}
         ~Route()
        {}

        bool Exit(const InetAddr& client)
        {
            //for(auto& e :_online_user)
            for (auto &e : _online_user)
            {
                if(e==client)
                return true;
            }
            return false;
        }
        //在这个函数实现向所有在线client发送这个client发出的消息
        void MassageRoute(int sockfd,const std::string& massage,InetAddr& client)
        {
            kzz::LockGuard lock(_mutex);
            if(!Exit(client))
            {
                LOG(LogLevel::DBUGER)<<"新增一个用户: "<<client.Ip();
                _online_user.push_back(client);
            }
            //向所有在线用户发信息
            for(auto & e:_online_user)
            {
                ////再犯这种智障错误我就是猪
                std::string ret=client.Ip()+"Echo# "+massage;
                sendto(sockfd,ret.c_str(),ret.size(),0,e.Addr(),e.Len());
                LOG(LogLevel::DBUGER)<<e.Port()<<"   "<<e.Ip()<<"向这个端口发信号";
                 LOG(LogLevel::DBUGER)<<"当前在线用户人数："<<_online_user.size();
            }



        }



        public:

        private:
        Mutex _mutex;  //
        std::vector<InetAddr> _online_user;




    };
}